Skip to content

feat(fulltext): read global indexes via paimon-ftindex-core#571

Merged
JingsongLi merged 1 commit into
apache:mainfrom
shyjsarah:feat/global-fulltext-core
Jul 23, 2026
Merged

feat(fulltext): read global indexes via paimon-ftindex-core#571
JingsongLi merged 1 commit into
apache:mainfrom
shyjsarah:feat/global-fulltext-core

Conversation

@shyjsarah

@shyjsarah shyjsarah commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Purpose

Migrate the append/data-evolution global full-text search path from the legacy in-repository Tantivy implementation to the shared paimon-ftindex-core engine.

This lets Rust and DataFusion read the current full-text index archives produced by Java Paimon and PyPaimon while preserving the existing full_text_search(table_name, column_name, query_text, limit) SQL API.

This PR intentionally focuses on the non-primary-key/global-index path. The primary-key full-text and hybrid search work is covered separately by #568.

Brief change log

  • Replace the legacy Tantivy archive reader and writer modules with an adapter over paimon-ftindex-core.
  • Read full-text entries from snapshot index manifests through a bounded-concurrency SeekRead adapter.
  • Support plain-text queries, the Paimon JSON query DSL, Roaring include filters, shard-local/global row-ID translation, and global Top-K merging.
  • Align fast, full, and detail search modes with Java and PyPaimon behavior, including raw fallback for uncovered row ranges.
  • Filter deleted rows through data-evolution deletion vectors and keep raw fallback scoring in a single BM25 corpus.
  • Add core and DataFusion coverage for native index reads, row-range filtering, raw fallback, query normalization, authorization, and branch table queries.

API and compatibility

  • The full_text_search(table_name, column_name, query_text, limit) SQL table-function signature is unchanged.
  • The feature-gated Rust API changes: FullTextSearch and SearchResult move from paimon::tantivy::full_text_search to paimon::full_text, while the legacy TantivyFullTextReader and TantivyFullTextWriter APIs are removed.
  • Plain-text queries remain supported. Callers using advanced Tantivy QueryParser syntax must migrate those queries to the Paimon JSON query DSL.
  • Ordinary Paimon table data files are unchanged.
  • The fulltext feature now reads the current Paimon full-text archive format. Legacy tantivy-fulltext auxiliary indexes are no longer supported and must be rebuilt in the current format.

Testing

  • cargo check -p paimon --features fulltext
  • cargo test -p paimon --features fulltext full_text -- --nocapture
  • cargo check -p paimon-datafusion --features fulltext
  • cargo test -p paimon-datafusion --features fulltext fulltext_tests -- --nocapture
  • cargo clippy -p paimon --lib --tests --features fulltext -- -D warnings
  • cargo clippy -p paimon-datafusion --lib --tests --features fulltext -- -D warnings
  • Full GitHub CI matrix: 13/13 jobs passed after rebasing onto main

Scope and coordination

@JunRuiLee

Copy link
Copy Markdown
Contributor

Thanks for the great coordination here, @shyjsarah! 🙏 #563 is now merged into main, so the reader foundation you were waiting on is in place. You're good to rebase — feel free to build on it rather than duplicate. Ping me if anything doesn't line up.

@shyjsarah
shyjsarah force-pushed the feat/global-fulltext-core branch from 38e92cf to 10cb134 Compare July 23, 2026 02:47
@JingsongLi
JingsongLi marked this pull request as ready for review July 23, 2026 05:18
@JingsongLi JingsongLi closed this Jul 23, 2026
@JingsongLi JingsongLi reopened this Jul 23, 2026
@shyjsarah
shyjsarah force-pushed the feat/global-fulltext-core branch from 10cb134 to 7ac6d49 Compare July 23, 2026 05:29

@JingsongLi JingsongLi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@JingsongLi
JingsongLi merged commit 4c70d28 into apache:main Jul 23, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants